package club.haomoon.front.service;

import club.haomoon.core.common.PageResult;
import club.haomoon.front.data.article.ArticleCateData;
import club.haomoon.front.data.article.ArticleCollectData;
import club.haomoon.front.data.article.ArticleDetailData;
import club.haomoon.front.data.article.ArticleListedData;
import club.haomoon.front.validate.article.ArticleSearchValidate;
import club.haomoon.front.validate.common.PageValidate;

import java.util.List;

/**
 * -------------------------
 * @Description: 文章服务接口类
 * @Author: Wangjianwei
 * @Date: 2025/02/24 14:12  
 * -------------------------
 */
public interface IArticleService {

    /**
     * 文章分类
     *
     * @author Wangjw
     * @return List<ArticleCateData>
     */
    List<ArticleCateData> category();

    /**
     * 文章分类
     *
     * @author Wangjw
     * @param userId 用户ID
     * @param pageValidate 分页参数
     * @param searchValidate 搜索参数
     * @return PageResult<ArticleListVo>
     */
    PageResult<ArticleListedData> list(Integer userId, PageValidate pageValidate, ArticleSearchValidate searchValidate);

    /**
     * 文章详情
     *
     * @author Wangjw
     * @param id 文章主键
     * @param userId 用户ID
     * @return ArticleDetailData
     */
    ArticleDetailData detail(Integer id, Integer userId);

    /**
     * 文章收藏
     *
     * @author Wangjw
     * @param pageValidate 分页参数
     * @param userId 用户ID
     * @return PageResult<ArticleListVo>
     */
    PageResult<ArticleCollectData> collect(PageValidate pageValidate, Integer userId);

    /**
     * 加入收藏
     *
     * @author Wangjw
     * @param articleId 文章ID
     * @param userId 用户ID
     */
    void addCollect(Integer articleId, Integer userId);

    /**
     * 取消收藏
     *
     * @author Wangjw
     * @param articleId 主键
     * @param userId 用户ID
     */
    void cancelCollect(Integer articleId, Integer userId);

}
